///////////////////
/// mkIV - Game ///
///////////////////

#pragma once

// Game includes
#include "../../Game/mkGameDeclare.h"
#include "../../Game/Interface/mkIGameEngine.h"

namespace mk
{
namespace Game
{

class GameEngine : public IGameEngine
{

public:

    // Construction
    static Errno Create( GameEngine*& gameEngine );

    ~GameEngine();

    // Methods inherited from IGameEngine
    Errno EnterMainLoop( ) override;
    Errno ExitMainLoop ( ) override;
    Errno SingleTick   ( TickInfo const& info ) override;

private:

    GameEngine( );

    Errno Initialise( );
    Errno InitialiseCoreLib( );
    Errno InitialiseEngineLib( );

    Errno Shutdown( );
    Errno ShutdownCoreLib( );
    Errno ShutdownEngineLib( );

    // Engine systems.
    Physics::IPhysicsSystemPtr m_physicsSystem; // The physics system.

}; // class GameEngine

} // namespace Game
} // namespace mk

